<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="text/javascript">
        //三种输出方式
        // 弹出框方式
        alert("你好,这是弹出框")
        //输出到浏览器控制台
        console.log("你好,这是控制台")
        //输出到浏览器页面中
        document.write("你好,这是浏览器页面1")
        //\r\n属于window系统分隔符,浏览器不识别,对于浏览器<br>才是分隔符
        document.write("你好,这是浏览器页面2\r\n")
        document.write("<br>")
        document.write("你好,这是浏览器页面2")

        let name = "lixixi"
        //es5之前定义变量使用关键字var(variable)
        //es6之后使用let,因为var定义变量具有作用域问题
        //原因:var Hoisting(变量提升)：使用var在函数或全局内任何地方声明变量相当于在其内部最顶上声明它，这种行为称为Hoisting（提升）。

        console.log(name)
        console.log(typeof (name))   //typeof关键字同C
        // 1）数值类型(整数和小数)：number
        // 2）字符类型：string
        // 3) 布尔类型：boolean
        // 4) 未定义类型：undefined
        // 5）空类型：null  来源于undefined，所以认为和undefined是相等的。  console.log(null == undefined);//true

        // ===: 属于严格比较，如果运算符两侧的数据类型不一致，那么直接返回false。如果运算符两侧类型一致，那么在比较数值
        // == : 属于非严格比较，如果运算符两侧的数据类型不一致，那么先转换为一致，然后在比较数值，可以理解为 == 不做数据类型的比较，直接比较数值
        let x = 1
        let x_str = "1"
        console.log(x == x_str) //true 非严格转换 != 是 == 取反
        console.log(x === x_str) //false 严格转换 !== 是 === 取反

        //支持三元运算符 () ? () : ()
        console.log(1 ? true : false)
        console.log(!1 ? true : false)

        //js中函数分为两类
        //1.普通函数
        function demo01(flag) {
            if (flag)
                console.log("flag:" + flag + "为真")
            else
                console.log("flag:" + flag + "为假")
        }
        //调用函数
        demo01(true);
        demo01(false);
        // add(1,3) 报错: function undefined,顺序执行,

        //2.匿名函数
        add = (a, b) => {
            console.log(a + b)
        }
        add(1, 2);

        // 扩展：了解
        // 普通函数使用注意事项：
        // 1.调用有参数的函数可以不传递实参
        // 2.调用无参数的函数可以传递实参
        // 3.调用无参数的函数可以传递的实参放到js中的一个内置数组对象arguments中，我们可以遍历数组取出数据

        // print_args1=()=>{ console.log(arguments) }
        // print_args1(11) //报错 arguments undefined, 因为只有function关键字声明的函数才会内置 this 与 arguments
        print_args2 = function () {
            console.log("遍历arguments数组")
            //index in arr 使用in获取的是数组下标
            for(let arg in arguments)
            {
                console.log(arguments[arg])
            }

            //arg of arr 使用of获取数组内容
        }
        print_args(1, [1, 2, 3], 3)
        add() //NaN
        demo01()   //undefined

    </script>
</body>

</html>